<?php

interface IQueryObject
{

  /**
   *
   * @param mixed $fields
   * @return IQueryObject
   */
  public function select($fields = null, $remove = null);

  /**
   *
   * @return IQueryObject
   */
  public function insert($table = null, $data = null);

  /**
   *
   * @return IQueryObject
   */
  public function update($table = null, $data = null, $where = null);

  /**
   *
   * @return QueryObject
   */
  public function delete($table = null, $where = null);

  /**
   *
   * @param mixed $table
   * @return IQueryObject
   */
  public function from($table = null, $remove = null);

  /**
   *
   * @return IQueryObject
   */
  public function data($data = null, $remove = null);

  /**
   *
   * @return IQueryObject
   */
  public function join($join = null, $type = null, $remove = null);

  /**
   *
   * @return IQueryObject
   */
  public function groupBy($field = null, $remove = null);

  /**
   *
   * @return IQueryObject
   */
  public function having($condition = null, $remove = null);

  /**
   *
   * @return IQueryObject
   */
  public function where($condition = null, $remove = null);

  /**
   *
   * @return IQueryObject
   */
  public function orderBy($field = null, $direction = null, $remove = null);

  /**
   *
   * @return IQueryObject
   */
  public function limit($limit = null);

  /**
   *
   * @return IQueryObject
   */
  public function offset($offset = null);

  /**
   *
   * @param string $sql
   * @return IQueryObject
   */
  public function sql($sql = null);

  /**
   *
   * @param mixed $data
   * @return IQueryResult
   */
  public function execute($data = null);

  /**
   *
   * @return IQueryResult
   */
  public function executeRaw();

}

?>